

import java.util.Iterator;
import java.util.LinkedList;

/**
 * 链表操作
 */
//这个和list的操作一样？？？
public class PracticsLinkedList {
    public static void main(String[] args) {
        //新建链表，装的内容可以是任何包装类
        LinkedList<Integer> list = new LinkedList<>();
        //给链表赋值
        list.add(5);//只能顺序插入
        list.add(4);
        list.add(3);
        list.add(2);
        list.add(3);
        list.addLast(1);//尾部值
        list.addFirst(6);//头部值

        //有了头尾后再插入值，新加的值就在尾部，前面尾部的值还是存在
        list.add(7);

        //打印链表
        System.out.println("list内容如下：" + list);

        //计算链表长度
        int length = list.size();
        System.out.println("list链表长度：" + length);

        //判断链表中是否包含某个值
        boolean isExist = list.contains(1);
        System.out.println("链表中是否包含1 " + isExist);

        //按索引取值,取第二个值
        Integer value = list.get(1);
        System.out.println("链表中的第二个值为：" + value);

        //取特殊值，取头部值
        Integer head = list.getFirst();
        System.out.println("list的头部值为：" + head);

        //取特殊值，取尾部值
        Integer last = list.getLast();
        System.out.println("list的尾部值为：" + last);

        //不知道索引，也不知道值在头部和尾部，如何取值？


        //删除：按索引删除
        list.remove(0);//删除第一个值
        System.out.println("删除第一个元素后。list内容为" + list);


        //删除：按值删除-方法1
        list.add(7);
        list.add(7);
        System.out.println("list的值为" + list);

        //删除：按值删除-方法2
        list.remove((Object) 7);//有多个重复值时，只能删除一个，没法把所有相同的值都删除
        System.out.println("删除7后。list内容为" + list);

        //删除：按值删除-方法3
        while (list.contains(7)) {
            list.remove((Object) 7);//循环删除相同的元素
        }
        System.out.println("删除所有的7后。list内容为" + list);

        //删除：按值删除-方法4--更安全
        list.add(7);
        list.addFirst(7);
        System.out.println("list的值为" + list);


        //获取值的坐标--1
        int index1=list.indexOf(3);
        System.out.println("3第一次出现的位置："+index1);

        //获取值的坐标--2
        int index2=list.lastIndexOf(3);
        System.out.println("3最后一次出现的位置："+index2);

        Iterator<Integer> iterator = list.iterator();
        while (iterator.hasNext()) {
            if (iterator.next() == 7) {
                iterator.remove();
            }
        }
        System.out.println("删除所有的7后。list内容为" + list);


        //链表修改
        list.set(2,9);//把坐标为2位置的值修改为9
        System.out.println("修改链表后，list内容为" + list);
    }
}
